# 导入OpenCV和NumPy库
import cv2
import numpy as np

# 读取两张图片
# 图片路径中的双反斜杠(\\)是转义字符，表示单个反斜杠
img1 = cv2.imread("9\\5.bmp")  # 读取第一张图片
img2 = cv2.imread("9\\4.bmp")  # 读取第二张图片

# 创建一个20行30列的全1矩阵作为形态学操作的内核(结构元素)
# np.uint8表示无符号8位整数(0-255)，这是图像处理的常用数据类型
kernel1 = np.ones((20, 30), np.uint8)

# 对第一张图片进行形态学操作:
# 1. 先进行腐蚀操作(erosion) - 缩小白色区域或放大黑色区域
# 2. 然后进行膨胀操作(dilation) - 放大白色区域或缩小黑色区域
# 这种先腐蚀后膨胀的操作称为"开运算"(Opening)，用于消除小物体或分离物体

erosion1 = cv2.erode(img1, kernel1)  # 腐蚀操作             压缩
erosion1 = cv2.dilate(erosion1, kernel1)  # 膨胀操作        扩大

# 对第二张图片进行相同的形态学操作
erosion2 = cv2.erode(img2, kernel1)
erosion2 = cv2.dilate(erosion2, kernel1)

# 显示原始图片和处理后的图片
cv2.imshow("img1", img1)  # 显示第一张原始图片
cv2.imshow("erosion1", erosion1)  # 显示第一张处理后的图片
cv2.imshow("img2", img2)  # 显示第二张原始图片
cv2.imshow("erosion2", erosion2)  # 显示第二张处理后的图片

# 等待用户按键，0表示无限等待
cv2.waitKey()
# 关闭所有OpenCV创建的窗口
cv2.destroyAllWindows()